home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / tcppack / tcppackb.lzh / src / samples / inetdconf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-07  |  7.1 KB  |  365 lines

  1. /*
  2.  * inetdconf.c - configure inetd
  3.  *
  4.  * Copyright (C) 1994 Tomoaki Tada/F.C.T.
  5.  */
  6.  
  7. static char *rcsid = "$Id: inetdconf.c,v 1.5 1994/10/02 07:57:36 Niggle Exp $";
  8.  
  9. /*
  10.  * $Log: inetdconf.c,v $
  11.  * Revision 1.5  1994/10/02  07:57:36  Niggle
  12.  * ripɺîΣé≡Æ╟ë┴
  13.  * æσò¥é╔Åæè╖éª
  14.  *
  15.  * Revision 1.4  1994/08/04  05:02:08  Niggle
  16.  * inetdé¬ÅφÆôé╡é─éóé╚éóÅΩìçé╠ò\Īé≡ò╧ìX
  17.  * routeâIâvâVâçâôé≡routeré╔ò╧ìX
  18.  *
  19.  * Revision 1.3  1994/07/26  10:03:03  Niggle
  20.  * domain é¬ uninitilizeé╛é┴é╜é╠é≡ÅCÉ│
  21.  *
  22.  * Revision 1.2  1994/07/25  10:57:16  Niggle
  23.  * domain name é╠É▌ÆΦé╠Æ╟ë┴
  24.  * usageé╠ò\Ī
  25.  * bug fixes
  26.  *
  27.  * Revision 1.1  1994/07/19  03:30:14  Niggle
  28.  * Initial revision
  29.  *
  30.  */
  31.  
  32. #include<stdio.h>
  33. #include<stdlib.h>
  34. #include<string.h>
  35.  
  36. #include"network.h"
  37. #include"socket.h"
  38.  
  39. static int add_default_route (long);
  40. static void print_current (void);
  41. static void print_usage (void);
  42. static char *ipaddr2host (long);
  43.  
  44. static int set_router (int *, int, char **);
  45. static int set_rip (int *, int, char **);
  46. static int set_domain (int *, int, char **);
  47. static int set_dns (int *, int, char **);
  48.  
  49. struct cmd {
  50.   unsigned char *str;
  51.   int (*func) (int *, int, char **);
  52. };
  53.  
  54. #define NCMDS (4)
  55. struct cmd cmds[NCMDS] = {
  56.   {"router", set_router},
  57.   {"rip", set_rip},
  58.   {"domain", set_domain},
  59.   {"dns", set_dns},
  60. };
  61.  
  62. char *my_name;
  63.  
  64. /************************************************
  65.  *                        *
  66.  ************************************************/
  67. int
  68. main (int argc, char **argv)
  69. {
  70.   int i, ii, result = -1;
  71.  
  72.   my_name = argv[0];
  73.   if (_get_version () == -1)
  74.     {
  75.       fprintf (stderr, "TCP/IP driveré═ÅφÆôé╡é─éóé▄é╣é±\n");
  76.       return 1;
  77.     }
  78.  
  79.   if (argc < 2)
  80.     {
  81.       print_current ();
  82.       return 0;
  83.     }
  84.  
  85.   for (i = 1; i < argc; i++)
  86.     {
  87.       for (ii = 0; ii < NCMDS; ii++)
  88.     {
  89.       if (!strcmp (cmds[ii].str, argv[i] + 1))
  90.         {
  91.           result = cmds[ii].func (&i, argc, argv);
  92.           break;
  93.         }
  94.     }
  95.       if (ii >= NCMDS)
  96.     {
  97.       result = -1;
  98.       break;
  99.     }
  100.       if (result)
  101.     break;
  102.     }
  103.  
  104.   if (result < 0)
  105.     {
  106.       print_usage ();
  107.       fprintf (stderr, "%s: Illeagal option: %s\n", my_name, argv[i]);
  108.     }
  109.   return result;
  110. }
  111.  
  112. /************************************************
  113.  *                        *
  114.  ************************************************/
  115. static int
  116. set_router (int *i, int argc, char **argv)
  117. {
  118.   char *p = argv[*i];
  119.   int c = *p;
  120.   long router;
  121.  
  122.   if (c != '-' && c != '+')
  123.     return -1;
  124.   if (c == '-')
  125.     {
  126.       rt_drop (0, 0);
  127.       (*i)++;
  128.       return 0;
  129.     }
  130.  
  131.   p = argv[++(*i)];
  132.   if (*i >= argc)
  133.     {
  134.       fprintf (stderr, "%s: %s: requires router\n", my_name, argv[*i - 1]);
  135.       return 1;
  136.     }
  137.  
  138.   if (isipaddr (p))
  139.     router = a2n_ipaddr (p);
  140.   else
  141.     {
  142.       struct hostent *h;
  143.       h = gethostbyname (p);
  144.       if (h)
  145.     router = *(long *)h->h_addr;
  146.       else
  147.     router = 0;
  148.     }
  149.   if (router)
  150.     return add_default_route (router);
  151.  
  152.   fprintf (stderr, "%s: Host name lookup failure: %s\n", my_name, p);
  153.   return 1;
  154. }
  155.  
  156. /************************************************
  157.  *                        *
  158.  ************************************************/
  159. static int
  160. set_dns (int *ii, int argc, char **argv)
  161. {
  162.   int i, plus, c = *argv[*ii];
  163.   long dns;
  164.   int added;
  165.  
  166.   if (c != '-' && c != '+')
  167.     return -1;
  168.   if (c == '-')
  169.     plus = 0;
  170.   else
  171.     plus = 1;
  172.  
  173.   added = 0;
  174.   for (i = *ii + 1; i < argc; i++)
  175.     {
  176.       char *p = argv[i];
  177.       c = *p;
  178.  
  179.       if (c == '-' || c == '+')
  180.     {
  181.       i--;
  182.       break;
  183.     }
  184.  
  185.       if (isipaddr (p))
  186.     dns = a2n_ipaddr (p);
  187.       else
  188.     {
  189.       struct hostent *h;
  190.       h = gethostbyname (p);
  191.       if (h)
  192.         dns = *(long *)h->h_addr;
  193.       else
  194.         dns = 0;
  195.     }
  196.  
  197.       if (!dns)
  198.     {
  199.       fprintf (stderr, "%s: Host name look up failure: %s\n", my_name, p);
  200.       break;
  201.     }
  202.  
  203.       added++;
  204.       if (plus)
  205.     dns_add (dns);
  206.       else
  207.     dns_drop (dns);
  208.     }
  209.  
  210.   *ii = i;
  211.   return 0;
  212. }
  213.  
  214. /************************************************
  215.  *                        *
  216.  ************************************************/
  217. static int
  218. set_domain (int *ii, int argc, char **argv)
  219. {
  220.   int i = *ii;
  221.   char *p = argv[i];
  222.  
  223.   if (*p == '-')
  224.     {
  225.       set_domain_name ("");
  226.       return 0;
  227.     }
  228.   else if (*p != '+')
  229.     return -1;
  230.  
  231.   if (++i >= argc)
  232.     {
  233.       fprintf (stderr, "%s: %s: requires domain name\n", my_name, argv[i - 1]);
  234.       return 1;
  235.     }
  236.   *ii = i;
  237.   p = argv[i];
  238.   if (strlen (p) > 63)
  239.     {
  240.       fprintf (stderr, "%s: Too long domain name: %s\n", p);
  241.       return 1;
  242.     }
  243.   else
  244.     set_domain_name (p);
  245.   return 0;
  246. }
  247.  
  248. /************************************************
  249.  *                        *
  250.  ************************************************/
  251. static int
  252. set_rip (int *ii, int _argc, char **argv)
  253. {
  254.   int c = *argv[*ii];
  255.  
  256.   if (c == '-')
  257.     rip_set (RIP_OFF);
  258.   else if (c == '+')
  259.     rip_set (RIP_ON);
  260.   else
  261.     return -1;
  262.  
  263.   return 0;
  264. }
  265.  
  266. /************************************************
  267.  *                        *
  268.  ************************************************/
  269. static void
  270. print_current (void)
  271. {
  272.  
  273.   /* print default router */
  274.   {
  275.     route *def;
  276.  
  277.     def = NULL;
  278.     rt_top (&def);
  279.     if (def && def->iface)
  280.       printf ("default router:\t\t%s\n", ipaddr2host (def->gateway));
  281.     else
  282.       printf ("default router:\t\tNone\n");
  283.   }
  284.  
  285.   printf ("rip           :\t\t%s\n", (rip_set (RIP_STAT) ? "On" : "Off"));
  286.  
  287.   /* print dns */
  288.   {
  289.     struct dns *cur;
  290.  
  291.     printf ("domain name servers:\t");
  292.     cur = dns_get ();
  293.     if (cur)
  294.       {
  295.     for (; cur != NULL; cur = cur->next)
  296.       printf ("%s ", ipaddr2host (cur->address));
  297.     printf ("\n");
  298.       }
  299.     else
  300.       printf ("None\n");
  301.   }
  302.  
  303.   {
  304.     char *dname;
  305.  
  306.     dname = get_domain_name ();
  307.     if (dname && *dname)
  308.       printf ("domain name:\t\t%s\n", dname);
  309.     else
  310.       printf ("domain name:\t\tNone\n");
  311.   }
  312.   return;
  313. }
  314.  
  315. /************************************************
  316.  *                        *
  317.  ************************************************/
  318. static int
  319. add_default_route (long target)
  320. {
  321.   route *rt;
  322.  
  323.   rt = rt_lookup (target);
  324.   if (!rt)
  325.     {
  326.       char buff[32];
  327.  
  328.       n2a_ipaddr (target, buff);
  329.       fprintf (stderr, "%s: No route for %s.\n", my_name, buff);
  330.       return 1;
  331.     }
  332.  
  333.   rt_add (0, 0, target, rt->iface, 16, 0, 1);
  334.   return 0;
  335. }
  336.  
  337. /************************************************
  338.  *                        *
  339.  ************************************************/
  340. static void
  341. print_usage (void)
  342. {
  343.   fprintf (stderr, "%s version 1.01 Copyright (C) 1994 FirstClassTechnology.\n", my_name);
  344.   fprintf (stderr, "usage: %s [+route default-router] [-route] [+rip] [-rip]\n", my_name);
  345.   fprintf (stderr, "         [+dns domain-name-server] [-dns domain-name-server]\n");
  346.   fprintf (stderr, "         [+domain domain-name] [-dns]\n");
  347.  
  348. }
  349.  
  350. /************************************************
  351.  *                        *
  352.  ************************************************/
  353. static char *
  354. ipaddr2host (long target)
  355. {
  356.   static char buff[64];
  357.   struct hostent *h;
  358.  
  359.   h = gethostbyaddr ((char *)&target, sizeof (long), AF_INET);
  360.   if (!h)
  361.     return n2a_ipaddr (target, buff);
  362.   else
  363.     return strcpy (buff, h->h_name);
  364. }
  365.